#ifndef ICORE_H
#define ICORE_H

#include <QObject>

class QSettings;

class CMessagingLayer;
class CObjectManager;

class ActionManager;
class ContextManager;
class UidManager;

class MainWindow;

class ICore : public QObject
{
    Q_OBJECT
public:
    explicit ICore(MainWindow *parent = 0);
    ~ICore();
    static ICore * instance();

    QSettings * settings() const;

    MainWindow * mainWindow() const;

    CObjectManager * objectManager() const;
    CMessagingLayer * messagingLayer() const;

    UidManager * uidManager() const;
    ContextManager * contextManager() const;
    ActionManager * actionManager() const;


signals:

public slots:

private:
    MainWindow * m_mainWindow;

    QSettings * m_settings;
    CObjectManager * m_objectManager;
    CMessagingLayer * m_messagingLayer;
    UidManager * m_uidManager;
    ContextManager * m_contextManager;
    ActionManager * m_actionManager;

    static ICore * m_instance;
};

#endif // ICORE_H
